package de.saxsys.projectiler; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.logging.LogManager; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.stage.StageStyle; import de.saxsys.projectiler.initialization.ApplicationAlreadyRunningChecker; import de.saxsys.projectiler.initialization.ProjectilerFonts; import de.saxsys.projectiler.misc.MovablePane; import de.saxsys.projectiler.misc.Notification; import de.saxsys.projectiler.tray.Tray; public class ClientStarter extends Application { @Override public void start(final Stage stage) throws Exception { initLogging(); ApplicationAlreadyRunningChecker.check(); ProjectilerFonts.initFonts(); initStage(stage, createRootElement(stage)); initNotification(stage); } private void initLogging() { final InputStream inputStream = ClientStarter.class.getResourceAsStream("/logging.properties"); try { LogManager.getLogManager().readConfiguration(inputStream); } catch (SecurityException | IOException e) { System.err.println("Could not initialize logging"); e.printStackTrace(); } } private MovablePane createRootElement(final Stage stage) throws IOException { final MovablePane movablePane = new MovablePane(stage); final URL rootUrl = ClientStarter.class.getResource("/Projectiler.fxml"); final StackPane stackPane = FXMLLoader.load(rootUrl); movablePane.getChildren().add(stackPane); return movablePane; } private void initStage(final Stage stage, final MovablePane rootElement) { rootElement.setStyle("-fx-background-color:transparent;"); final Scene scene = new Scene(rootElement); stage.setScene(scene); stage.setTitle("Projectiler"); stage.initStyle(StageStyle.TRANSPARENT); scene.setFill(Color.TRANSPARENT); stage.getIcons().add(new Image(ClientStarter.class.getResourceAsStream("/projectiler.png"))); stage.show(); Tray.getInstance().initTrayForStage(stage); } private void initNotification(final Stage stage) { final double notHeight = 40; final double notWidth = 322; Notification.Notifier.setOffsetY(-20); Notification.Notifier.setWidth(notWidth); Notification.Notifier.setHeight(notHeight); Notification.Notifier.setPopupLocation(stage, Pos.BOTTOM_CENTER); } public static void main(final String[] args) { launch(args); } }